]> git.sur5r.net Git - openocd/blobdiff - src/helper/replacements.h
move options handling to separate file to better support embedded implementations...
[openocd] / src / helper / replacements.h
index 0b132d778fd8bc75f55c09395427a5d7d56e0f3f..84705c528acd42013efd8e4688483b6888b3e5d7 100644 (file)
@@ -24,6 +24,8 @@
 #include "config.h"
 #endif
 
+#include "types.h"
+
 /* include necessary headers for socket functionality */
 #ifdef _WIN32
 #include <winsock2.h>
@@ -65,7 +67,40 @@ struct timezone {
 };
 
 extern int gettimeofday(struct timeval *tv, struct timezone *tz);
-#endif
+#endif\r
+\r
+/**** clear_malloc & fill_malloc ****/
+void *clear_malloc(size_t size);
+void *fill_malloc(size_t size);
+\r
+/*\r
+ * Now you have 3 ways for the malloc function:\r
+ *\r
+ * 1. Do not change anything, use the original malloc\r
+ *\r
+ * 2. Use the clear_malloc function instead of the original malloc.\r
+ *    In this case you must use the following define:\r
+ *    #define malloc((_a)) clear_malloc((_a))\r
+ *\r
+ * 3. Use the fill_malloc function instead of the original malloc.\r
+ *    In this case you must use the following define:\r
+ *    #define malloc((_a)) fill_malloc((_a))\r
+ *\r
+ * We have figured out that there could exist some malloc problems\r
+ * where variables are using without to be initialise. To find this\r
+ * places, use the fill_malloc function. With this function we want \r
+ * to initialize memory to some known bad state. This is quite easily \r
+ * spotted in the debugger and will trap to an invalid address. \r
+ *\r
+ * clear_malloc can be used if you want to set not initialise \r
+ * variable to 0.\r
+ *\r
+ * If you do not want to change the malloc function, to not use one of\r
+ * the following macros. Which is the default way.\r
+ */\r
\r
+//#define malloc(_a) clear_malloc(_a)
+//#define malloc(_a) fill_malloc(_a)
 
 /* GNU extensions to the C library that may be missing on some systems */
 #ifndef HAVE_STRNDUP
@@ -152,4 +187,51 @@ static __inline void socket_nonblock(int fd)
 #endif
 }
 
+#ifndef HAVE_ELF_H
+
+typedef struct
+{
+       unsigned char   e_ident[16];    /* Magic number and other info */
+       u16     e_type;                 /* Object file type */
+       u16     e_machine;              /* Architecture */
+       u32     e_version;              /* Object file version */
+       u32 e_entry;            /* Entry point virtual address */
+       u32 e_phoff;            /* Program header table file offset */
+       u32     e_shoff;                /* Section header table file offset */
+       u32     e_flags;                /* Processor-specific flags */
+       u16     e_ehsize;               /* ELF header size in bytes */
+       u16     e_phentsize;            /* Program header table entry size */
+       u16     e_phnum;                /* Program header table entry count */
+       u16     e_shentsize;            /* Section header table entry size */
+       u16     e_shnum;                /* Section header table entry count */
+       u16     e_shstrndx;             /* Section header string table index */
+} Elf32_Ehdr;
+
+#define        ELFMAG          "\177ELF"
+#define        SELFMAG         4
+
+#define EI_CLASS       4               /* File class byte index */
+#define ELFCLASS32     1               /* 32-bit objects */
+#define ELFCLASS64     2               /* 64-bit objects */
+
+#define EI_DATA                5               /* Data encoding byte index */
+#define ELFDATA2LSB    1               /* 2's complement, little endian */
+#define ELFDATA2MSB    2               /* 2's complement, big endian */
+
+typedef struct
+{
+       u32 p_type;                     /* Segment type */
+       u32 p_offset;           /* Segment file offset */
+       u32 p_vaddr;            /* Segment virtual address */
+       u32 p_paddr;            /* Segment physical address */
+       u32 p_filesz;           /* Segment size in file */
+       u32 p_memsz;            /* Segment size in memory */
+       u32 p_flags;            /* Segment flags */
+       u32 p_align;            /* Segment alignment */
+} Elf32_Phdr;
+
+#define PT_LOAD                1               /* Loadable program segment */
+
+#endif /* HAVE_ELF_H */
+
 #endif /* REPLACEMENTS_H */