import_memory.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #include <assert.h>
  6. #include <stdbool.h>
  7. #include <stdint.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. struct Buffer {
  12. int size;
  13. char *data;
  14. };
  15. struct Buffer *
  16. new_buffer(int size)
  17. {
  18. struct Buffer *buffer = calloc(1, sizeof(struct Buffer));
  19. if (!buffer) {
  20. return NULL;
  21. }
  22. buffer->size = size;
  23. buffer->data = calloc(1, size);
  24. if (!buffer->data) {
  25. free(buffer);
  26. return NULL;
  27. }
  28. return buffer;
  29. }
  30. void
  31. release_buffer(struct Buffer *buffer)
  32. {
  33. buffer->size = 0;
  34. free(buffer->data);
  35. free(buffer);
  36. }
  37. __attribute__((export_name("goodhart_law"))) void
  38. goodhart_law()
  39. {
  40. struct Buffer *buffer = new_buffer(64);
  41. assert(buffer);
  42. snprintf(buffer->data, 60, "%s",
  43. "When a measure becomes a target, it ceases to be a good measure");
  44. assert(buffer->data[10] == 's');
  45. release_buffer(buffer);
  46. printf("-> pass basic\n");
  47. fflush(stdout);
  48. // alloc a huge buffer
  49. struct Buffer *huge_buffer = new_buffer(60000);
  50. assert(huge_buffer->data != NULL);
  51. memset(huge_buffer->data, 0xEE, 60000);
  52. assert((uint8_t)(huge_buffer->data[50000]) == 0xEE);
  53. release_buffer(huge_buffer);
  54. printf("-> pass huge allocations\n");
  55. fflush(stdout);
  56. int ret = __builtin_wasm_memory_grow(0, 1);
  57. // sync with the value assigned by `--initial-memory`
  58. assert(ret == 3);
  59. printf("-> pass manually memory.grow\n");
  60. fflush(stdout);
  61. }
  62. int
  63. main()
  64. {
  65. goodhart_law();
  66. return EXIT_SUCCESS;
  67. }