Changing the source slightly to use a constant that fits in 1 byte,
leads to correct code. (In the function not in the macro, see below
diff, so the code is only different in one place).

A movs instruction is generated for 200, whereas for 400 it is a mov.w
and then a nop at the end of the function for padding.

This may affect other offset calculations but I could not determine why
and which one contributes to the fault.


diff --git a/apt-pkg/contrib/error.cc b/apt-pkg/contrib/error.cc
index 6f6b7a4..17e6f13 100644
--- a/apt-pkg/contrib/error.cc
+++ b/apt-pkg/contrib/error.cc
@@ -84,7 +84,7 @@ GEMessage(DebugE, DEBUG)
 bool GlobalError::InsertErrno(MsgType const &type, const char *Function,
                                const char *Description,...) {
        va_list args;
-       size_t msgSize = 400;
+       size_t msgSize = 200;
        int const errsv = errno;
        while (true) {
                va_start(args,Description);

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/774175

Title:
  apt segfaults on armel in oneiric

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to