Wenn ist .ARM.exidx verwendet wird

Arbeite ich auf Contiki 2.7 mit der mbxxx Ziel. Während dem Bau meiner code der linker beschwert sich über eine überschneiden .ARM.exidx und .Daten Abschnitten. Nach etwas Herumprobieren, um mit dem linker-Skript contiki-2.7/cpu/stm32w108/gnu-stm32w108.ld habe das problem behoben durch Austausch:

__exidx_start = .;
__exidx_end = .;

mit:

.ARM.exidx : {
    __exidx_start = .;
    *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    __exidx_end = .;
} >ROM_region

Später, als ich versuchte, zu sehen, der header, der einige weitere Beispiel-Anwendungen durch die Verwendung von objdump -h habe ich nicht finden diese insbesondere .ARM.exidx Abschnitt, während es in meiner Anwendung. Googeln über .ARM.exidx führte mich zu der Tatsache, dass es für einige c++ - exception-handling. Da mein code ist ein reiner C-code, warum ist dieser Abschnitt vorhanden, auf meinen code? Wann ist der Regel .ARM.exidx in der Gegenwart ein, code und, was ist sein nutzen?

==================================================================================

Naja, Nein, ich habe keine solche compiler-Optionen. Ich bin eigentlich mit dem AxTLS api und Riss sich das Zertifikat-handling-code und portiert es auf contiki. Auf einige weitere Graben fand ich ein fischig Verhalten in der bigint-Umsetzung. Um es kurz zu machen... hier ist der Körper einer Funktion vom Datentyp bigint.c-Datei:

static bigint *bi_int_multiply(BI_CTX *ctx, bigint *bia, comp b)
{
   int j = 0, n = bia->size;
   bigint *biR = alloc(ctx, n + 1);
   comp carry = 5;
   comp *r = biR->comps;
   comp *a = bia->comps;

   check(bia);

   /* clear things to start with */
   memset(r, 0, ((n+1)*COMP_BYTE_SIZE));


   do
   {
       long_comp tmp = *r + (long_comp)a[j]*b + carry;
   //   *r++ = (comp)tmp;              /* downsize */
       carry = (comp)(tmp >> COMP_BIT_SIZE);
   } while (++j < n);

  //*r = carry;
  bi_free(ctx, bia);

  return trim(biR);
}

wenn die auskommentierten Teile, (die r-variable Zuordnung) ist aufgehoben, die .ARM.exidx Ding erscheint, sonst nicht! Nun können diese erklärt werden???

==================================================================================

Ich nicht finden, eine Sache jenseits des gewöhnlichen, bei der Implementierung von alloc(). Dort wurden 2 Verweise von alloca() verwendet in einer separaten region des Codes, die ich ersetzt mit malloc() und free(), aber das schien nicht das problem zu beheben entweder. alloc() Umsetzung hat nur Aufrufe von malloc(),realloc() und free()

  • Hallo @user2668988! Ebenso ein heads-up, wenn Sie hinzufügen möchten mehr Details zu Ihrer Frage, können Sie Bearbeiten hier Ihre Frage.
  • Ist biR mit alloca() oder wie ist alloc() umgesetzt? Der compiler kann die gleichen C++ - Mechanismus zu verfolgen alloca() Art der Haushaltsmittel. Wenn Sie kommentieren Sie r mit Optimierungen, die alloc() wird nicht passieren.
  • Ich habe nicht gefunden, etwas aus der gewöhnlichen bei der Implementierung von alloc(). Dort wurden 2 Verweise von alloca() verwendet in einer separaten region des Codes, die ich ersetzt mit malloc() und free(), aber das schien nicht das problem zu beheben entweder. alloc() Umsetzung hat nur Aufrufe von malloc(),realloc() und free()
InformationsquelleAutor user2668988 | 2014-02-03
Schreibe einen Kommentar