Bug ID: 24916
Summary: [MIPS] Highest EI_ABIVERSION value not raised to
Assignee: unassigned at sourceware dot org
Reporter: [hidden email] Target Milestone: ---
The highest possible EI_ABIVERSION value for MIPS was not raised with the
introduction of absolute symbols handling. This causes a discrepancy with the
static linker. If a shared object has its EI_ABIVERSION set to ABSOLUTE_ABI,
dynamic linker will fail with the "ABI version invalid" error.
The bug can be reproduced on o32 with this
$ cat libtest.s
.type x, @function
.size x, .-x
$ cat test.c
int *x (void);
$ gcc -shared -fPIC libtest.s -o libtest.so
$ gcc test.c libtest.so -o test
$ ./test: error while loading shared libraries: libtest.so: ELF file ABI
You are receiving this mail because:
You are on the CC list for the bug.
[MIPS] Raise highest supported EI_ABIVERSION value [BZ #24916]
This bumps the highest valid EI_ABIVERSION value to ABSOLUTE ABI.
New testcase loads the symbol from the GOT with the "lb" instruction
so that the EI_ABIVERSION header field of the shared object is set
to ABSOLUTE (it doesn't actually check the value of the symbol), and
makes sure that the main executable is executed without "ABI version
Tested for all three ABIs (o32, n32, n64) using both static linker which
handles undefined weak symbols correctly  (and sets the EI_ABIVERSION
of the test module) and the one that doesn't (EI_ABIVERSION left as 0).