test/testloadso.c
author Jinke Fan <fanjinke@hygon.cn>
Wed, 15 May 2019 19:54:36 +0800
changeset 13082 f77988be3607
parent 12503 806492103856
permissions -rw-r--r--
Add Hygon Dhyana processor support

Background:
Chengdu Haiguang IC Design Co., Ltd (Hygon) is a Joint Venture
between AMD and Haiguang Information Technology Co.,Ltd., aims at
providing high performance x86 processor for China server market.
Its first generation processor codename is Dhyana, which
originates from AMD technology and shares most of the
architecture with AMD's family 17h, but with different CPU Vendor
ID("HygonGenuine")/Family series number(Family 18h).

Related Hygon kernel patch can be found on:
http://lkml.kernel.org/r/5ce86123a7b9dad925ac583d88d2f921040e859b.1538583282.git.puwen@hygon.cn

Best regards.
     1 /*
     2   Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
     3 
     4   This software is provided 'as-is', without any express or implied
     5   warranty.  In no event will the authors be held liable for any damages
     6   arising from the use of this software.
     7 
     8   Permission is granted to anyone to use this software for any purpose,
     9   including commercial applications, and to alter it and redistribute it
    10   freely.
    11 */
    12 
    13 /* Test program to test dynamic loading with the loadso subsystem.
    14 */
    15 
    16 #include <stdio.h>
    17 #include <stdlib.h>
    18 #include <string.h>
    19 
    20 #include "SDL.h"
    21 
    22 typedef int (*fntype) (const char *);
    23 
    24 int
    25 main(int argc, char *argv[])
    26 {
    27     int retval = 0;
    28     int hello = 0;
    29     const char *libname = NULL;
    30     const char *symname = NULL;
    31     void *lib = NULL;
    32     fntype fn = NULL;
    33 
    34     if (argc != 3) {
    35         const char *app = argv[0];
    36         SDL_Log("USAGE: %s <library> <functionname>\n", app);
    37         SDL_Log("       %s --hello <lib with puts()>\n", app);
    38         return 1;
    39     }
    40 
    41     /* Initialize SDL */
    42     if (SDL_Init(0) < 0) {
    43         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
    44         return 2;
    45     }
    46 
    47     if (strcmp(argv[1], "--hello") == 0) {
    48         hello = 1;
    49         libname = argv[2];
    50         symname = "puts";
    51     } else {
    52         libname = argv[1];
    53         symname = argv[2];
    54     }
    55 
    56     lib = SDL_LoadObject(libname);
    57     if (lib == NULL) {
    58         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadObject('%s') failed: %s\n",
    59                 libname, SDL_GetError());
    60         retval = 3;
    61     } else {
    62         fn = (fntype) SDL_LoadFunction(lib, symname);
    63         if (fn == NULL) {
    64             SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadFunction('%s') failed: %s\n",
    65                     symname, SDL_GetError());
    66             retval = 4;
    67         } else {
    68             SDL_Log("Found %s in %s at %p\n", symname, libname, fn);
    69             if (hello) {
    70                 SDL_Log("Calling function...\n");
    71                 fflush(stdout);
    72                 fn("     HELLO, WORLD!\n");
    73                 SDL_Log("...apparently, we survived.  :)\n");
    74                 SDL_Log("Unloading library...\n");
    75                 fflush(stdout);
    76             }
    77         }
    78         SDL_UnloadObject(lib);
    79     }
    80     SDL_Quit();
    81     return retval;
    82 }