c/4700: GCC not honoring asm clobbered regesters for -fPIC on i386

ddaney@avtrex.com ddaney@avtrex.com
Fri Oct 26 10:56:00 GMT 2001


>Number:         4700
>Category:       c
>Synopsis:       GCC not honoring asm clobbered regesters for -fPIC on i386
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Fri Oct 26 10:56:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     David Daney
>Release:        gcc 3.0.1
>Organization:
>Environment:
Linux dl 2.4.13-1 #1 Wed Oct 24 14:35:01 PDT 2001 i686 unknown
GNU assembler 2.11.2
GNU ld 2.11.2
>Description:
The test case for the problem is an inline function that
contains only asm code.

When compiled with -fPIC it seems that gcc uses the register ebx to point to the static data area.  However the asm statement says that the asm code clobbers ebx.  Gcc should save ebx and then restore its value after the asm block, but it does not.  This leads to SEGV when the clobbered ebx is used to access static data.
>How-To-Repeat:
break the included file into its three parts 
clobber.c clobbertest.c and Makefile

Then build with make all.

The executable clobberbad will SEGV when run.
The executable clobbergood will complete with out problems.

clobberbad links to the asm code compiled with -fPIC and clobbergood links to the same code but without -fPIC.
>Fix:
explicitly save and restore all clobbered registers in asm statements and then do not use the asm clobbers clause.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bundle"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bundle"

LS0tLS0tLSBjbG9iYmVyLmMgLS0tLS0tLS0tCgoKCmludCBjb25maWd1cmVkID0gMDsKaW50IGNv
bmZpZ1ZhbHVlID0gMDsKCgoKLyoJRnVuY3Rpb24gdG8gdGVzdCBpZiBtdWx0aW1lZGlhIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkLi4uCiovCmlubGluZSBleHRlcm4gaW50Cm1tX3N1cHBvcnQo
dm9pZCkKewoJLyogUmV0dXJucyAxIGlmIE1NWCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZCwK
CSAgIDMgaWYgQ3lyaXggTU1YIGFuZCBFeHRlbmRlZCBNTVggaW5zdHJ1Y3Rpb25zIGFyZSBzdXBw
b3J0ZWQKCSAgIDUgaWYgQU1EIE1NWCBhbmQgM0ROb3chIGluc3RydWN0aW9ucyBhcmUgc3VwcG9y
dGVkCgkgICAwIGlmIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgYW55IG9mIHRoZXNlCgkqLwoJ
cmVnaXN0ZXIgaW50IHJ2YWwgPSAwOwoKCV9fYXNtX18gX192b2xhdGlsZV9fICgKCQkvKiBTZWUg
aWYgQ1BVSUQgaW5zdHJ1Y3Rpb24gaXMgc3VwcG9ydGVkIC4uLiAqLwoJCS8qIC4uLiBHZXQgY29w
aWVzIG9mIEVGTEFHUyBpbnRvIGVheCBhbmQgZWN4ICovCgkJInB1c2hmXG5cdCIKCQkicG9wbCAl
JWVheFxuXHQiCgkJIm1vdmwgJSVlYXgsICUlZWN4XG5cdCIKCgkJLyogLi4uIFRvZ2dsZSB0aGUg
SUQgYml0IGluIG9uZSBjb3B5IGFuZCBzdG9yZSAqLwoJCS8qICAgICB0byB0aGUgRUZMQUdTIHJl
ZyAqLwoJCSJ4b3JsICQweDIwMDAwMCwgJSVlYXhcblx0IgoJCSJwdXNoICUlZWF4XG5cdCIKCQki
cG9wZlxuXHQiCgoJCS8qIC4uLiBHZXQgdGhlIChob3BlZnVsbHkgbW9kaWZpZWQpIEVGTEFHUyAq
LwoJCSJwdXNoZlxuXHQiCgkJInBvcGwgJSVlYXhcblx0IgoKCQkvKiAuLi4gQ29tcGFyZSBhbmQg
dGVzdCByZXN1bHQgKi8KCQkieG9ybCAlJWVheCwgJSVlY3hcblx0IgoJCSJ0ZXN0bCAkMHgyMDAw
MDAsICUlZWN4XG5cdCIKCQkianogTm90U3VwcG9ydGVkMVxuXHQiCQkvKiBDUFVJRCBub3Qgc3Vw
cG9ydGVkICovCgoKCQkvKiBHZXQgc3RhbmRhcmQgQ1BVSUQgaW5mb3JtYXRpb24sIGFuZAoJCSAg
ICAgICBnbyB0byBhIHNwZWNpZmljIHZlbmRvciBzZWN0aW9uICovCgkJIm1vdmwgJDAsICUlZWF4
XG5cdCIKCQkiY3B1aWRcblx0IgoKCQkvKiBDaGVjayBmb3IgSW50ZWwgKi8KCQkiY21wbCAkMHg3
NTZlNjU0NywgJSVlYnhcblx0IgoJCSJqbmUgVHJ5QU1EXG5cdCIKCQkiY21wbCAkMHg0OTY1NmU2
OSwgJSVlZHhcblx0IgoJCSJqbmUgVHJ5QU1EXG5cdCIKCQkiY21wbCAkMHg2YzY1NzQ2ZSwgJSVl
Y3hcbiIKCQkiam5lIFRyeUFNRFxuXHQiCgkJImptcCBJbnRlbFxuXHQiCgoJCS8qIENoZWNrIGZv
ciBBTUQgKi8KCQkiXG5UcnlBTUQ6XG5cdCIKCQkiY21wbCAkMHg2ODc0NzU0MSwgJSVlYnhcblx0
IgoJCSJqbmUgVHJ5Q3lyaXhcblx0IgoJCSJjbXBsICQweDY5NzQ2ZTY1LCAlJWVkeFxuXHQiCgkJ
ImpuZSBUcnlDeXJpeFxuXHQiCgkJImNtcGwgJDB4NDQ0ZDQxNjMsICUlZWN4XG4iCgkJImpuZSBU
cnlDeXJpeFxuXHQiCgkJImptcCBBTURcblx0IgoKCQkvKiBDaGVjayBmb3IgQ3lyaXggKi8KCQki
XG5UcnlDeXJpeDpcblx0IgoJCSJjbXBsICQweDY5NzI3OTQzLCAlJWVieFxuXHQiCgkJImpuZSBO
b3RTdXBwb3J0ZWQyXG5cdCIKCQkiY21wbCAkMHg3MzZlNDk3OCwgJSVlZHhcblx0IgoJCSJqbmUg
Tm90U3VwcG9ydGVkM1xuXHQiCgkJImNtcGwgJDB4NjQ2MTY1NzQsICUlZWN4XG5cdCIKCQkiam5l
IE5vdFN1cHBvcnRlZDRcblx0IgoJCS8qIERyb3AgdGhyb3VnaCB0byBDeXJpeC4uLiAqLwoKCgkJ
LyogQ3lyaXggU2VjdGlvbiAqLwoJCS8qIFNlZSBpZiBleHRlbmRlZCBDUFVJRCBsZXZlbCA4MDAw
MDAwMSBpcyBzdXBwb3J0ZWQgKi8KCQkvKiBUaGUgdmFsdWUgb2YgQ1BVSUQvODAwMDAwMDEgZm9y
IHRoZSA2eDg2TVggaXMgdW5kZWZpbmVkCgkJICAgYWNjb3JkaW5nIHRvIHRoZSBDeXJpeCBDUFUg
RGV0ZWN0aW9uIEd1aWRlIChQcmVsaW1pbmFyeQoJCSAgIFJldi4gMS4wMSB0YWJsZSAxKSwgc28g
d2UnbGwgY2hlY2sgdGhlIHZhbHVlIG9mIGVheCBmb3IKCQkgICBDUFVJRC8wIHRvIHNlZSBpZiBz
dGFuZGFyZCBDUFVJRCBsZXZlbCAyIGlzIHN1cHBvcnRlZC4KCQkgICBBY2NvcmRpbmcgdG8gdGhl
IHRhYmxlLCB0aGUgb25seSBDUFUgd2hpY2ggc3VwcG9ydHMgbGV2ZWwKCQkgICAyIGlzIGFsc28g
dGhlIG9ubHkgb25lIHdoaWNoIHN1cHBvcnRzIGV4dGVuZGVkIENQVUlEIGxldmVscy4KCQkqLwoJ
CSJjbXBsICQweDIsICUlZWF4XG5cdCIKCQkiam5lIE1NWHRlc3Rcblx0IgkvKiBVc2Ugc3RhbmRh
cmQgQ1BVSUQgaW5zdGVhZCAqLwoKCQkvKiBFeHRlbmRlZCBDUFVJRCBzdXBwb3J0ZWQgKGluIHRo
ZW9yeSksIHNvIGdldCBleHRlbmRlZAoJCSAgIGZlYXR1cmVzICovCgkJIm1vdmwgJDB4ODAwMDAw
MDEsICUlZWF4XG5cdCIKCQkiY3B1aWRcblx0IgoJCSJ0ZXN0bCAkMHgwMDgwMDAwMCwgJSVlYXhc
blx0IgkvKiBUZXN0IGZvciBNTVggKi8KCQkianogTm90U3VwcG9ydGVkNVxuXHQiCQkvKiBNTVgg
bm90IHN1cHBvcnRlZCAqLwoJCSJ0ZXN0bCAkMHgwMTAwMDAwMCwgJSVlYXhcblx0IgkvKiBUZXN0
IGZvciBFeHQnZCBNTVggKi8KCQkiam56IEVNTVhTdXBwb3J0ZWRcblx0IgoJCSJtb3ZsICQxLCAl
MFxuXG5cdCIJCS8qIE1NWCBTdXBwb3J0ZWQgKi8KCQkiam1wIFJldHVyblxuXG4iCgkJIkVNTVhT
dXBwb3J0ZWQ6XG5cdCIKCQkibW92bCAkMywgJTBcblxuXHQiCQkvKiBFTU1YIGFuZCBNTVggU3Vw
cG9ydGVkICovCgkJImptcCBSZXR1cm5cblx0IgoKCgkJLyogQU1EIFNlY3Rpb24gKi8KCQkiQU1E
OlxuXHQiCgoJCS8qIFNlZSBpZiBleHRlbmRlZCBDUFVJRCBpcyBzdXBwb3J0ZWQgKi8KCQkibW92
bCAkMHg4MDAwMDAwMCwgJSVlYXhcblx0IgoJCSJjcHVpZFxuXHQiCgkJImNtcGwgJDB4ODAwMDAw
MDAsICUlZWF4XG5cdCIKCQkiamwgTU1YdGVzdFxuXHQiCS8qIFVzZSBzdGFuZGFyZCBDUFVJRCBp
bnN0ZWFkICovCgoJCS8qIEV4dGVuZGVkIENQVUlEIHN1cHBvcnRlZCwgc28gZ2V0IGV4dGVuZGVk
IGZlYXR1cmVzICovCgkJIm1vdmwgJDB4ODAwMDAwMDEsICUlZWF4XG5cdCIKCQkiY3B1aWRcblx0
IgoJCSJ0ZXN0bCAkMHgwMDgwMDAwMCwgJSVlZHhcblx0IgkvKiBUZXN0IGZvciBNTVggKi8KCQki
anogTm90U3VwcG9ydGVkNlxuXHQiCQkvKiBNTVggbm90IHN1cHBvcnRlZCAqLwoJCSJ0ZXN0bCAk
MHg4MDAwMDAwMCwgJSVlZHhcblx0IgkvKiBUZXN0IGZvciAzRE5vdyEgKi8KCQkiam56IFRocmVl
RE5vd1N1cHBvcnRlZFxuXHQiCgkJIm1vdmwgJDEsICUwXG5cblx0IgkJLyogTU1YIFN1cHBvcnRl
ZCAqLwoJCSJqbXAgUmV0dXJuXG5cbiIKCQkiVGhyZWVETm93U3VwcG9ydGVkOlxuXHQiCgkJIm1v
dmwgJDUsICUwXG5cblx0IgkJLyogM0ROb3chIGFuZCBNTVggU3VwcG9ydGVkICovCgkJImptcCBS
ZXR1cm5cblx0IgoKCgkJLyogSW50ZWwgU2VjdGlvbiAqLwoJCSJJbnRlbDpcblx0IgoKCQkvKiBD
aGVjayBmb3IgTU1YICovCgkJIk1NWHRlc3Q6XG5cdCIKCQkibW92bCAkMSwgJSVlYXhcblx0IgoJ
CSJjcHVpZFxuXHQiCgkJInRlc3RsICQweDAwODAwMDAwLCAlJWVkeFxuXHQiCS8qIFRlc3QgZm9y
IE1NWCAqLwoJCSJqeiBOb3RTdXBwb3J0ZWQ3XG5cdCIJCS8qIE1NWCBOb3Qgc3VwcG9ydGVkICov
CgkJIm1vdmwgJDEsICUwXG5cblx0IgkJLyogTU1YIFN1cHBvcnRlZCAqLwoJCSJqbXAgUmV0dXJu
XG5cdCIKCgkJLyogTm90aGluZyBzdXBwb3J0ZWQgKi8KCQkiXG5Ob3RTdXBwb3J0ZWQxOlxuXHQi
CgkJIiNtb3ZsICQxMDEsICUwXG5cblx0IgoJCSJcbk5vdFN1cHBvcnRlZDI6XG5cdCIKCQkiI21v
dmwgJDEwMiwgJTBcblxuXHQiCgkJIlxuTm90U3VwcG9ydGVkMzpcblx0IgoJCSIjbW92bCAkMTAz
LCAlMFxuXG5cdCIKCQkiXG5Ob3RTdXBwb3J0ZWQ0OlxuXHQiCgkJIiNtb3ZsICQxMDQsICUwXG5c
blx0IgoJCSJcbk5vdFN1cHBvcnRlZDU6XG5cdCIKCQkiI21vdmwgJDEwNSwgJTBcblxuXHQiCgkJ
IlxuTm90U3VwcG9ydGVkNjpcblx0IgoJCSIjbW92bCAkMTA2LCAlMFxuXG5cdCIKCQkiXG5Ob3RT
dXBwb3J0ZWQ3OlxuXHQiCgkJIiNtb3ZsICQxMDcsICUwXG5cblx0IgoJCSJtb3ZsICQwLCAlMFxu
XG5cdCIKCgkJIlJldHVybjpcblx0IgoJCTogIj1hIiAocnZhbCkKCQk6IC8qIG5vIGlucHV0ICov
CgkJOiAiZWJ4IiwgImVjeCIsICJlZHgiCgkpOwoKCS8qIFJldHVybiAqLwoJcmV0dXJuKHJ2YWwp
Owp9CgovKglGdW5jdGlvbiB0byB0ZXN0IGlmIG1teCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRl
ZC4uLgoqLwppbmxpbmUgZXh0ZXJuIGludAptbXhfb2sodm9pZCkKewoJLyogUmV0dXJucyAxIGlm
IE1NWCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZCwgMCBvdGhlcndpc2UgKi8KCXJldHVybiAo
IG1tX3N1cHBvcnQoKSAmIDB4MSApOwp9CgoKaW50IGNvbmZpZ3VyZSgpCnsKICAgaWYoIWNvbmZp
Z3VyZWQpewogICAgICBjb25maWdWYWx1ZSA9IG1teF9vaygpOwogICAgICBjb25maWd1cmVkID0g
MTsKICAgfQogICByZXR1cm4gY29uZmlnVmFsdWU7Cn0KCi0tLS0tLS0tLS0gZW5kIGNsb2JiZXIu
YyAtLS0tLS0tLQotLS0tLS0tLS0tIGNsb2JiZXJ0ZXN0LmMgLS0tLS0tLS0KCmV4dGVybiBpbnQg
Y29uZmlndXJlKHZvaWQpOwoKCmludAptYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAg
aW50IGk7CgogICBpID0gY29uZmlndXJlKCk7CiAgIGkgPSBjb25maWd1cmUoKTsKICAgCiAgIHJl
dHVybiBpOwp9Ci0tLS0tLS0tLS0gZW5kIGNsb2JiZXJ0ZXN0LmMgLS0tLS0tLS0KLS0tLS0tLS0t
LSBNYWtlZmlsZSAtLS0tLS0tLS0tLQoKCmFsbDoJY2xvYmJlcmJhZCBjbG9iYmVyZ29vZAoKY2xv
YmJlci5vOgljbG9iYmVyLmMKCWdjYyAtZyAtTzIgLWZQSUMgLURQSUMgLW8gY2xvYmJlci5vIC1j
IGNsb2JiZXIuYwoKb2subzoJY2xvYmJlci5jCglnY2MgLWcgLU8yIC1vIG9rLm8gLWMgY2xvYmJl
ci5jCgpsaWJjbG9iYmVyLnNvOgljbG9iYmVyLm8KCWdjYyAtZyAtTzIgLXNoYXJlZCAtZlBJQyAt
byBsaWJjbG9iYmVyLnNvIGNsb2JiZXIubwoKCmNsb2JiZXJ0ZXN0Lm86IGNsb2JiZXJ0ZXN0LmMK
CWdjYyAtZyAtTzIgLW8gY2xvYmJlcnRlc3QubyAtYyBjbG9iYmVydGVzdC5jCgpjbG9iYmVyYmFk
OgljbG9iYmVydGVzdC5vIGxpYmNsb2JiZXIuc28KCWdjYyAtZyAtTzIgLUwgLiAtWGxpbmtlciAt
cnBhdGggLVhsaW5rZXIgLiAtbGNsb2JiZXIgLW8gY2xvYmJlcmJhZCBjbG9iYmVydGVzdC5vCgpj
bG9iYmVyZ29vZDoJY2xvYmJlcnRlc3QubyBvay5vCglnY2MgLWcgLU8yIC1vIGNsb2JiZXJnb29k
IGNsb2JiZXJ0ZXN0Lm8gb2subwoKCi5QSE9OWTogY2xlYW4KCmNsZWFuOgoJcm0gLWYgKi5vICou
c28gY29yZSBjb3JlLiogY2xvYmJlcmJhZCBjbG9iYmVyZ29vZAoKCi0tLS0tLS0tLS0gZW5kIE1h
a2VmaWxlIC0tLS0tLS0K



More information about the Gcc-bugs mailing list