|
|
Message-ID: <CAEg67GnC-DMqkMOUs+3uEnetac_L52ehpALxq8oyS_9kg9RJtw@mail.gmail.com>
Date: Mon, 21 Oct 2019 15:43:40 +1100
From: Patrick Oppenlander <patrick.oppenlander@...il.com>
To: musl@...ts.openwall.com
Subject: another armv7-m exception handling problem
Not sure if this is a musl, gcc or ld bug.
Running gcc-8.3.0 musl 1.1.24 static pie.
Simple test case:
int main()
{
try {
throw 1;
} catch (int d) {
return d;
}
return 0;
}
Expected:
% ./a.out
% echo $?
1
Actual:
% ./a.out
terminate called after throwing an instance of 'int'
terminate called recursively
Aborted (core dumped)
The problem is that get_eit_entry is returning _URC_FAILURE here:
if (__gnu_Unwind_Find_exidx)
{
eitp = (const __EIT_entry *) __gnu_Unwind_Find_exidx (return_address,
&nrec);
if (!eitp)
{
UCB_PR_ADDR (ucbp) = 0;
return _URC_FAILURE; <----- !!!!
}
}
Looks like a linker or program load problem to me -- the GOT entry for
__gnu_Unwind_Find_exidx is correctly set to 0, but after program load
it's been offset to some non-zero value. There's an R_ARM_RELATIVE
relocation on the GOT entry.
Not sure where this is going wrong.
Kind regards,
Patrick
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.