tcl: replace FSF boilerplate with SPDX tag
[fw/openocd] / src / helper / replacements.h
index bdd3ae7c0d7d7377c8cf0305f29403e2f6534be6..4d70d9cf30bb347597fae57f258c44bf93db02dd 100644 (file)
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
-#ifndef REPLACEMENTS_H
-#define REPLACEMENTS_H
+#ifndef OPENOCD_HELPER_REPLACEMENTS_H
+#define OPENOCD_HELPER_REPLACEMENTS_H
+
+#include <stdint.h>
+#include <helper/system.h>
 
 /* MIN,MAX macros */
 #ifndef MIN
@@ -135,12 +136,9 @@ static inline unsigned usleep(unsigned int usecs)
 /* Windows specific */
 #ifdef _WIN32
 
-#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <time.h>
 
-#include <helper/types.h>
-
 /* Windows does not declare sockaddr_un */
 #define UNIX_PATH_LEN 108
 struct sockaddr_un {
@@ -204,6 +202,17 @@ static inline int close_socket(int sock)
 #endif
 }
 
+static inline void socket_block(int fd)
+{
+#ifdef _WIN32
+       unsigned long nonblock = 0;
+       ioctlsocket(fd, FIONBIO, &nonblock);
+#else
+       int oldopts = fcntl(fd, F_GETFL, 0);
+       fcntl(fd, F_SETFL, oldopts & ~O_NONBLOCK);
+#endif
+}
+
 static inline void socket_nonblock(int fd)
 {
 #ifdef _WIN32
@@ -230,18 +239,16 @@ static inline int socket_select(int max_fd,
 
 #ifndef HAVE_ELF_H
 
-#include <helper/types.h>
-
 typedef uint32_t Elf32_Addr;
 typedef uint16_t Elf32_Half;
 typedef uint32_t Elf32_Off;
-typedef int32_t Elf32_Sword;
 typedef uint32_t Elf32_Word;
 typedef uint32_t Elf32_Size;
-typedef Elf32_Off Elf32_Hashelt;
+
+#define EI_NIDENT   16
 
 typedef struct {
-       unsigned char e_ident[16];      /* Magic number and other info */
+       unsigned char e_ident[EI_NIDENT];       /* Magic number and other info */
        Elf32_Half e_type;                      /* Object file type */
        Elf32_Half e_machine;                   /* Architecture */
        Elf32_Word e_version;                   /* Object file version */
@@ -283,4 +290,42 @@ typedef struct {
 
 #endif /* HAVE_ELF_H */
 
-#endif /* REPLACEMENTS_H */
+#ifndef HAVE_ELF64
+
+typedef uint64_t Elf64_Addr;
+typedef uint16_t Elf64_Half;
+typedef uint64_t Elf64_Off;
+typedef uint32_t Elf64_Word;
+typedef uint64_t Elf64_Xword;
+
+typedef struct {
+       unsigned char e_ident[EI_NIDENT];       /* Magic number and other info */
+       Elf64_Half e_type;                      /* Object file type */
+       Elf64_Half e_machine;           /* Architecture */
+       Elf64_Word e_version;           /* Object file version */
+       Elf64_Addr e_entry;                     /* Entry point virtual address */
+       Elf64_Off e_phoff;                      /* Program header table file offset */
+       Elf64_Off e_shoff;                      /* Section header table file offset */
+       Elf64_Word e_flags;                     /* Processor-specific flags */
+       Elf64_Half e_ehsize;            /* ELF header size in bytes */
+       Elf64_Half e_phentsize;         /* Program header table entry size */
+       Elf64_Half e_phnum;                     /* Program header table entry count */
+       Elf64_Half e_shentsize;         /* Section header table entry size */
+       Elf64_Half e_shnum;                     /* Section header table entry count */
+       Elf64_Half e_shstrndx;          /* Section header string table index */
+} Elf64_Ehdr;
+
+typedef struct {
+       Elf64_Word p_type;              /* Segment type */
+       Elf64_Word p_flags;             /* Segment flags */
+       Elf64_Off p_offset;             /* Segment file offset */
+       Elf64_Addr p_vaddr;             /* Segment virtual address */
+       Elf64_Addr p_paddr;             /* Segment physical address */
+       Elf64_Xword p_filesz;   /* Segment size in file */
+       Elf64_Xword p_memsz;    /* Segment size in memory */
+       Elf64_Xword p_align;    /* Segment alignment */
+} Elf64_Phdr;
+
+#endif /* HAVE_ELF64 */
+
+#endif /* OPENOCD_HELPER_REPLACEMENTS_H */